﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;
public partial class UyQuyen : System.Web.UI.Page
{
    SqlParameter[] p;
    clsXuLy ex = new clsXuLy();
    static ReportDocument rpt;
    string frmName = "frmGiayUyQuyen";
    static int STT = 0, f_PheDuyet = 0, f_Xuat = 0, f_SuDung = 0, f_Them = 0, f_Sua = 0, f_Xoa = 0;
    public string Header = System.Configuration.ConfigurationSettings.AppSettings["Header"].ToString();
    public string Company = System.Configuration.ConfigurationSettings.AppSettings["Company"].ToString();
    static string ngay = DateTime.Now.Day < 10 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString();
    static string thang = DateTime.Now.Month < 10 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString();

    static DataTable dt;
    static DataTable dtChiTiet;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])) || string.IsNullOrEmpty(Convert.ToString(Session["NhomND"])))
            gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
        else
        {
            if (!IsPostBack)
            {
                Title = "Giấy ủy quyền | " + Header;
                string idnhom = Session["NhomND"].ToString();
                string sql = "select isnull([print],0), isnull(pheduyet,0), SuDung,Them,Sua,Xoa from vnttblnguoidungchucnang where idnhomnguoidung='" + idnhom + "' and tag='" + frmName + "'";

                LoadDrop(dlNguoiUyQuyen, "sp_vnttblnhansu_ListDrop", "--Chọn người ủy quyền--");
                LoadDrop(dlNguoiNhanUyQuyen, "sp_vnttblnhansu_ListDrop", "--Chọn người nhận ủy quyền--");

                DataTable dt2 = ex.GetData_Text(sql);
                if (dt2.Rows.Count > 0)
                {
                    f_Xuat = int.Parse(dt2.Rows[0][0].ToString());
                    f_PheDuyet = int.Parse(dt2.Rows[0][1].ToString());
                    f_SuDung = int.Parse(dt2.Rows[0]["SuDung"].ToString());
                    f_Them = int.Parse(dt2.Rows[0]["Them"].ToString());
                    f_Sua = int.Parse(dt2.Rows[0]["Sua"].ToString());
                    f_Xoa = int.Parse(dt2.Rows[0]["Xoa"].ToString());
                }
                if (f_SuDung.Equals(1))
                    btnCancel_Click(sender, e);
                else
                    gstGetMess("Bạn không có quyền xem trang này", "Home.aspx");
            }
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (f_Them.Equals(1))
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])))
                gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
            else
            {
                DateTime tungay = DateTime.Parse(ex.GetNgayThang(txtTuNgay.Text.Trim()).ToString());
                DateTime denngay = DateTime.Parse(ex.GetNgayThang(txtDenNgay.Text.Trim()).ToString());
                TimeSpan t = DateTime.Now - tungay;

                if (t.Days > 0)
                    gstGetMess("Ngày ủy quyền phải lớn hơn hoặc bằng ngày hôm nay", "");
                else
                {
                    TimeSpan t1 = tungay - denngay;
                    if (t1.Days > 0)
                        gstGetMess("Ngày hết hạn ủy quyền phải lớn hơn hoặc bằng ngày ủy quyền", "");
                    else
                    {
                        try
                        {
                            p = new SqlParameter[7];
                            p[0] = new SqlParameter("@IDs", Guid.NewGuid());
                            p[0].SqlDbType = SqlDbType.UniqueIdentifier;
                            p[1] = new SqlParameter("@So", txtSo.Text.Trim());
                            p[1].SqlDbType = SqlDbType.NVarChar;
                            p[2] = new SqlParameter("@NguoiUyQuyen", ex.GetGuid(dlNguoiUyQuyen.SelectedValue));
                            p[2].SqlDbType = SqlDbType.UniqueIdentifier;
                            p[3] = new SqlParameter("@NguoiDuocUyQuyen", ex.GetGuid(dlNguoiNhanUyQuyen.SelectedValue));
                            p[3].SqlDbType = SqlDbType.UniqueIdentifier;

                            p[4] = new SqlParameter("@NoiDung", txtNoiDung.Text.Trim());
                            p[4].SqlDbType = SqlDbType.NVarChar;
                            p[5] = new SqlParameter("@TuNgay", txtTuNgay.Text.Trim());
                            p[5].SqlDbType = SqlDbType.VarChar;
                            p[6] = new SqlParameter("@DenNgay", txtDenNgay.Text.Trim());
                            p[6].SqlDbType = SqlDbType.VarChar;

                            ex.ExecuteNonQuerry("sp_vnttblgiayuyquyen_Add", p);

                            int s = ex.GetValueInt_Text("select count(*) from vnttblautonumber where upper(Name)='" + frmName.ToUpper() + "'");
                            if (s.Equals(0))
                            {
                                //Insert auto number
                                p = new SqlParameter[4];
                                p[0] = new SqlParameter("@IDs", Guid.NewGuid());
                                p[0].SqlDbType = SqlDbType.UniqueIdentifier;
                                p[1] = new SqlParameter("@Name", frmName);
                                p[1].SqlDbType = SqlDbType.VarChar;
                                p[2] = new SqlParameter("@Number", 1);
                                p[2].SqlDbType = SqlDbType.Int;
                                p[3] = new SqlParameter("@Ngay", DateTime.Now.ToString("yyMMdd"));
                                p[3].SqlDbType = SqlDbType.VarChar;
                                ex.ExecuteNonQuerry("sp_vnttblautonumber_Add", p);
                            }
                            else
                            {
                                //Update auto number
                                p = new SqlParameter[3];
                                p[0] = new SqlParameter("@Name", frmName);
                                p[0].SqlDbType = SqlDbType.VarChar;
                                p[1] = new SqlParameter("@Number", txtSo.Text.Trim().Substring(6));
                                p[1].SqlDbType = SqlDbType.Int;
                                p[2] = new SqlParameter("@Ngay", DateTime.Now.ToString("yyMMdd"));
                                p[2].SqlDbType = SqlDbType.VarChar;
                                ex.ExecuteNonQuerry("sp_vnttblautonumber_Update", p);
                            }
                            LoadDanhSach();
                            btnCancel_Click(sender, e);
                            gstGetMess("Lưu thành công", "");
                        }
                        catch (Exception ax)
                        {
                            gstGetMess("Có lỗi trong quá trình lưu, xem trong file log", "");
                            ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\t" + "Giấy ủy quyền\t" + ax.Message);
                        }
                    }
                }
            }
        }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        txtSo.Text = "";
        txtNoiDung.Focus();
        dlNguoiUyQuyen.SelectedIndex = 0;
        dlNguoiNhanUyQuyen.SelectedIndex = 0;
        txtNoiDung.Text = "";
        txtTuNgay.Text = "";
        txtDenNgay.Text = "";
        txtLyDo.Text = "";

        btnDuyet.Visible = false;
        btnPDF.Visible = false;
        btnSave.Visible = true;
        btncapnhat.Visible = false;
        btnXoa.Visible = false;

        dlNguoiUyQuyen.Enabled = true;
        dlNguoiNhanUyQuyen.Enabled = true;
        txtNoiDung.ReadOnly = false;
        txtTuNgay.ReadOnly = false;
        txtDenNgay.ReadOnly = false;

        rdDat.Checked = true;
        rdKhongDat.Checked = false;

        STT = ex.GetValueInt_Text("select count(*) from vnttblautonumber where Ngay='" + DateTime.Now.ToString("yyMMdd") + "' and upper(Name)='" + frmName.ToUpper() + "'");

        if (STT.Equals(0))
            STT++;
        else
            STT = ex.GetValueInt_Text("select isnull(Number,0) from vnttblautonumber where Ngay='" + DateTime.Now.ToString("yyMMdd") + "' and upper(name)='" + frmName.ToUpper() + "'") + 1;
        if (STT < 10)
            txtSo.Text = DateTime.Now.ToString("yyMMdd") + "0" + STT.ToString();
        else txtSo.Text = DateTime.Now.ToString("yyMMdd") + STT.ToString();

        LoadDanhSach();

    }
    private void gstGetMess(string gstMess, string gstLink)
    {
        if (gstLink == "")
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('" + gstMess + "')", true);
        else
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('" + gstMess + "');window.location.href='" + gstLink + "'", true);

    }
    protected void btnPDF_Click(object sender, EventArgs e)
    {
        if (hdID.Value.Trim().Equals(""))
            gstGetMess("Hết phiên làm việc, vui lòng chọn lại văn bản để xuất", "");
        else
        {
            Guid ID = new Guid(hdID.Value);
            p = new SqlParameter[1];
            p[0] = new SqlParameter("@ID", ID);
            p[0].SqlDbType = SqlDbType.UniqueIdentifier;

            dt = ex.GetData("sp_vnttblgiayuyquyen_Print", p);
            if (dt.Rows.Count > 0)
                ViewReport("[Số: " + txtSo.Text.Trim() + "/VNT-UQ]", dt.Rows[0]["NguoiUyQuyen"].ToString(), dt.Rows[0]["TenCV1"].ToString(), dt.Rows[0]["CMND1"].ToString(), dt.Rows[0]["NoiCap1"].ToString(), dt.Rows[0]["NgayCap1"].ToString(), dt.Rows[0]["DiaChi1"].ToString(),
                    dt.Rows[0]["NguoiNhanUyQuyen"].ToString(), dt.Rows[0]["TenCV2"].ToString(), dt.Rows[0]["CMND2"].ToString(), dt.Rows[0]["NoiCap2"].ToString(), dt.Rows[0]["NgayCap2"].ToString(),
                    dt.Rows[0]["DiaChi2"].ToString(), dt.Rows[0]["NoiDung"].ToString(), dt.Rows[0]["TuNgay"].ToString(), dt.Rows[0]["DenNgay"].ToString(), Company);
        }
    }
    void ViewReport(string so, string hoten1, string chucvu1, string cmnd1, string noicap1, string ngaycap1, string diachi1,
        string hoten2, string chucvu2, string cmnd2, string noicap2, string ngaycap2, string diachi2, string noidung, string tungay, string denngay,string congty)
    {
        string path = Server.MapPath("Report/BC.PDF");
        rpt = new ReportDocument();
        rpt.Load(Server.MapPath("Report/GiayUyQuyen.rpt"));

        rpt.SetParameterValue("@So", so);
        rpt.SetParameterValue("@NgayThang", "Hà Nội, ngày " + DateTime.Now.Day.ToString() + " tháng " + DateTime.Now.Month.ToString() + " năm " + DateTime.Now.Year.ToString());

        rpt.SetParameterValue("ChucVu1", chucvu1);
        rpt.SetParameterValue("OngBa1", hoten1);
        rpt.SetParameterValue("CMND1", cmnd1);
        rpt.SetParameterValue("NoiCap1", noicap1);
        rpt.SetParameterValue("NgayCap1", ngaycap1);
        rpt.SetParameterValue("DiaChi1", diachi1);

        rpt.SetParameterValue("OngBa2", hoten2);
        rpt.SetParameterValue("ChucVu2", chucvu2);
        rpt.SetParameterValue("CMND2", cmnd2);
        rpt.SetParameterValue("NoiCap2", noicap2);
        rpt.SetParameterValue("NgayCap2", ngaycap2);
        rpt.SetParameterValue("DiaChi2", diachi2);

        rpt.SetParameterValue("NoiDung", noidung);
        rpt.SetParameterValue("TuNgay", tungay);
        rpt.SetParameterValue("DenNgay", denngay);
        rpt.SetParameterValue("CongTy", congty);


        rpt.ExportToDisk(ExportFormatType.PortableDocFormat, path);
        HttpResponse res = HttpContext.Current.Response;
        res.ClearContent();
        res.ContentType = "application/pdf";
        res.AddHeader("Content-Disposition", "Attachment; filename=VNT-UQ_" + DateTime.Now.ToString("ddMMyyyyhhmmss") + ".pdf" + ";");

        MemoryStream stream;
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
        byte[] img = new byte[fs.Length];
        fs.Read(img, 0, Convert.ToInt32(fs.Length));
        fs.Close();
        fs.Dispose();
        stream = new MemoryStream(img);
        stream.WriteTo(Response.OutputStream);

        FileInfo f = new FileInfo(path);
        if (f.Exists) f.Delete();
        res.End();
    }
    private void LoadDanhSach()
    {
        ck1.Checked = false;
        ck2.Checked = false;
        ck3.Checked = false;
        ck4.Checked = false;


        if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])) || string.IsNullOrEmpty(Convert.ToString(Session["NhomND"])))
            gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
        else
        {
            dt = ex.GetData("sp_vnttblgiayuyquyen_ListByAdmin");
            dt.DefaultView.RowFilter = "TrangThai='Chờ duyệt'";
            ck4.Checked = true;
            GV.DataSource = dt;
            GV.DataBind();
        }

    }

    private void LoadDrop(DropDownList dl, string proc, string tieude)
    {
        dl.Items.Clear();
        dl.DataSource = ex.GetData(proc);
        dl.DataBind();
        dl.Items.Insert(0, new ListItem(tieude, ""));
        dl.SelectedIndex = 0;
    }
    protected void btncapnhat_Click(object sender, EventArgs e)
    {
        if (f_Sua.Equals(1))
        {
            try
            {
                DateTime tungay = DateTime.Parse(ex.GetNgayThang(txtTuNgay.Text.Trim()).ToString());
                DateTime denngay = DateTime.Parse(ex.GetNgayThang(txtDenNgay.Text.Trim()).ToString());
                TimeSpan t = DateTime.Now - tungay;

                if (t.Days > 0)
                    gstGetMess("Giá trị đến phải lớn hơn hoặc bằng ngày hôm nay", "");
                else
                {
                    TimeSpan t1 = tungay - denngay;
                    if (t1.Days > 0)
                        gstGetMess("Ngày hết hạn ủy quyền phải lớn hơn hoặc bằng ngày ủy quyền", "");
                    else
                    {
                        Guid gID = new Guid(hdID.Value);
                        p = new SqlParameter[6];
                        p[0] = new SqlParameter("@IDs", gID);
                        p[0].SqlDbType = SqlDbType.UniqueIdentifier;

                        p[1] = new SqlParameter("@NguoiUyQuyen", ex.GetGuid(dlNguoiUyQuyen.SelectedValue));
                        p[1].SqlDbType = SqlDbType.UniqueIdentifier;
                        p[2] = new SqlParameter("@NguoiDuocUyQuyen", ex.GetGuid(dlNguoiNhanUyQuyen.SelectedValue));
                        p[2].SqlDbType = SqlDbType.UniqueIdentifier;

                        p[3] = new SqlParameter("@NoiDung", txtNoiDung.Text.Trim());
                        p[3].SqlDbType = SqlDbType.NVarChar;
                        p[4] = new SqlParameter("@TuNgay", txtTuNgay.Text.Trim());
                        p[4].SqlDbType = SqlDbType.VarChar;
                        p[5] = new SqlParameter("@DenNgay", txtDenNgay.Text.Trim());
                        p[5].SqlDbType = SqlDbType.VarChar;

                        ex.ExecuteNonQuerry("sp_vnttblgiayuyquyen_Update", p);
                        btnCancel_Click(sender, e);
                        gstGetMess("Cập nhật thành công", "");
                    }
                }
            }
            catch (Exception ax)
            {
                gstGetMess("Có lỗi trong quá trình cập nhật, xem trong file log", "");
                ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiấy ủy quyền\t" + ax.Message);
            }
        }
        else
            gstGetMess("Bạn không có quyền sửa dữ liệu trên trang này", "");
    }
    protected void btnXoa_Click(object sender, EventArgs e)
    {


        try
        {
            Guid gID = new Guid(hdID.Value);
            p = new SqlParameter[1];
            p[0] = new SqlParameter("@IDs", gID);
            p[0].SqlDbType = SqlDbType.UniqueIdentifier;
            ex.ExecuteNonQuerry("sp_vnttblgiayuyquyen_Del", p);
            btnCancel_Click(sender, e);
            gstGetMess("Xóa thành công", "");
        }
        catch (Exception ax)
        {
            gstGetMess("Có lỗi trong quá trình xóa, xem trong file log", "");
            ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiấy ủy quyền\t" + ax.Message);

        }
    }

    protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        string ID = e.CommandArgument.ToString();
        hdID.Value = ID;
        Guid gID = new Guid(ID);
        p = new SqlParameter[1];
        p[0] = new SqlParameter("@IDs", gID);
        p[0].SqlDbType = SqlDbType.UniqueIdentifier;

        if (e.CommandName.Equals("Select"))
        {
            dtChiTiet = ex.GetData("sp_vnttblgiayuyquyen_ListByID", p);
            if (dtChiTiet.Rows.Count > 0)
            {
                try
                {
                    txtSo.Text  = dtChiTiet.Rows[0]["So"].ToString();
                    dlNguoiUyQuyen.SelectedValue = dtChiTiet.Rows[0]["NguoiUyQuyen"].ToString();
                    dlNguoiNhanUyQuyen.SelectedValue = dtChiTiet.Rows[0]["NguoiDuocUyQuyen"].ToString();
                    txtNoiDung.Text  = dtChiTiet.Rows[0]["NoiDung"].ToString();
                    txtTuNgay.Text = dtChiTiet.Rows[0]["TuNgay"].ToString();
                    txtDenNgay.Text = dtChiTiet.Rows[0]["DenNgay"].ToString();


                    string trangthai = dtChiTiet.Rows[0]["TrangThai"].ToString();

                    btnXoa.Visible = false;

                    if (f_PheDuyet == 1)
                        btnDuyet.Visible = trangthai.Equals("1");

                    if (f_Xuat == 1)
                        btnPDF.Visible = trangthai.Equals("2");

                    if (trangthai.Equals("1") || trangthai.Equals("3"))
                        btnXoa.Visible = true;
                    else btnXoa.Visible = false;

                    if (trangthai.Equals("1"))
                    {
                        btncapnhat.Visible = true;

                        dlNguoiUyQuyen.Enabled = true;
                        dlNguoiNhanUyQuyen.Enabled = true;
                        txtNoiDung.ReadOnly = false;
                        txtTuNgay.ReadOnly = false;
                        txtDenNgay.ReadOnly = false;
                    }
                    else
                    {
                        btncapnhat.Visible = false;
                        dlNguoiUyQuyen.Enabled = false;
                        dlNguoiNhanUyQuyen.Enabled = false;
                        txtNoiDung.ReadOnly = true;
                        txtTuNgay.ReadOnly = true;
                        txtDenNgay.ReadOnly = true;
                    }
                }
                catch (Exception ax)
                {
                    gstGetMess("Có lỗi trong quá trình xem, xem trong file log", "");
                    ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiới ủy quyền\t" + ax.Message);
                }
            }
            btnSave.Visible = false;

        }
    }
    protected void btnLuu_Click(object sender, EventArgs e)
    {
        Guid IDs = new Guid(hdID.Value);
        p = new SqlParameter[3];
        p[0] = new SqlParameter("@IDs", IDs);
        p[0].SqlDbType = SqlDbType.UniqueIdentifier;
        p[1] = new SqlParameter("@TrangThai", rdDat.Checked ? 2 : 3);
        p[1].SqlDbType = SqlDbType.Int;
        p[2] = new SqlParameter("@KetLuan", txtLyDo.Text.Trim());
        p[2].SqlDbType = SqlDbType.NVarChar;
        ex.ExecuteNonQuerry("sp_vnttblgiayuyquyen_UpdateStatus", p);
        btnCancel_Click(sender, e);
    }
    protected void stt_CheckedChanged(object sender, EventArgs e)
    {
        string filtter = "";
        if (ck1.Checked)
        {
            filtter = "";
        }
        else
            if (ck2.Checked)
            {
                filtter = "TrangThai='Đã duyệt'";
            }
            else
                if (ck3.Checked)
                {
                    filtter = "TrangThai='Không duyệt'";
                }
                else
                    if (ck4.Checked)
                    {
                        filtter = "TrangThai='Chờ duyệt'";
                    }
        dt.DefaultView.RowFilter = filtter;
        GV.DataSource = dt;
        GV.DataBind();
    }
}